#pragma once

#include <iostream>
#include <string>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#include <sstream>
#include "log.hpp"
using namespace std;

class util{
public:
    //一般网页文件都是文本的，但图片、音视频等可能是二进制的
    static bool ReadFile(const string &path,string *fileContent){
        //1、获取文件大小
        struct stat st;
        int n = stat(path.c_str(), &st);
        if(n<0){
            return false;
        }
        int size = st.st_size;
        // 2、调整string容量
        fileContent->resize(size);

        //3、读取
        int fd = open(path.c_str(), O_RDONLY);
        if(fd<0){
            return false;
        }
        n = read(fd, (char*)fileContent->c_str(), size);
        close(fd);
        logMessage(INFO, "read file %s done", path.c_str());
        return true;
    }

    static string ReadOneLine(string &request, const string &sep){
        auto pos = request.find(sep);
        if(pos==string::npos){
            return "";
        }
        string s = request.substr(0, pos);
        //每次读完删除已经读完的数据和它的分割符
        request.erase(0, pos + sep.size());
        return s;
    }

    static bool ParseRequestLine(const string &line, string *method, string *url, string *version){
        stringstream ss(line);
        ss >> *method >> *url >> *version;
        return true;
    }
};